home *** CD-ROM | disk | FTP | other *** search
-
- DOC.TXT
-
- DME V1.28 (C)CopyRight 1987, Matthew Dillon. All Rights Reserved. This
- software may be distributed for non-profit only. This software is
- NOT shareware.
-
- Matthew Dillon contribute if you wish.
- 891 Regal Rd
- Berkeley, Ca. 94708
-
- Source is available on request or by anonymous FTP. Source requests
- can ONLY be made via electronic mail to the following address:
-
- USENET ...!ihnp4!ucbvax!dillon
- ARPANET dillon@ucbvax.berkeley.edu
-
- ---------------------------------------------------------------------------
-
- I Overview
- II Keymapping key and mouse mapping
- III Command Sequences DME commands
- IV File Particulars notes on loading and saving files
- V Workbench Support
- VI Revision Summary revision numbering, changes made, etc...
- VII Compiling compiling instructions
-
- I
- OVERVIEW
-
- See REVISIONS section for revisions. DME is a WYSIWYG editor designed
- mainly for programmers. Although it is not a word processor, it does
- include many word processing features such as Word-Wrap and automatic
- paragraph formatting. Here is a quick 'features' list:
-
- -control language based on a rich command set accessed manually
- or via arbitrary mapping of keys. (Every key may be mapped to 128
- different things via qualifier and mouse keys)
-
- -fast visual response (it scrolls quickly)... even faster when
- BlitzFonts is running.
-
- -title-line statistics showing your current position in the file,
- file name, whether the file has been modified or not, etc...
-
- -Multiple Windows, ability to iconify windows
-
- -Word Wrap and automatic paragraph formatting.
-
- -ability to map any KEY or MOUSE BUTTON combination.
-
- DME has been designed to allow easy expansion, and I intend to make many
- future improvments. It has not been designed for user friendliness, but is
- straight forward if you read this document [care]fully.
-
- DME can take any number of arguments. Any argument without a '-' in front
- of it is considered to be a file. Normally, DME will automatically SOURCE
- two script file, S:.EDRC, and the .EDRC in your current directory. These
- files do not have to exist. These script files usually contain mappings and
- do things like turn on word wrap and set the right margin.
-
- FLAGS:
- -ffilename -source this script file instead of .EDRC
-
- -b -normally when multiple files are specified,
- DME opens them with small windows. This opens
- them with normal sized windows.
-
- -tN -Open the window on scan line N
- -lN -Open the window offset N scan columns
- -wN -Make the window N pixels wide
- -hN -Make the window N pixels high
-
-
- II
- KEYMAPPING
-
- MOUSE BUTTONS:
-
- The mouse buttons and combinations thereof may now be mapped. The
- default mappings for the mouse buttons are as follows:
-
- Left-button: Move cursor to current mouse position
- Right-button: Iconify window
- Left-button held down while moving mouse tracks the cursor
-
- The iconification features:
- -Remembers original window size and placement
- -Remembers placement of iconified window when you re-iconify later.
-
- Currently, you will crash the machine if you run out of memory and DME
- is unable to open the icon window or original window, so be careful.
-
- see below for mapping the mouse buttons and mouse movement.
-
-
- KEYBOARD:
-
- The rest of the Functional interface for DME is based on key/mouse mappings
- and a rich command set. Unlike other text editors, any non-qualifier key
- in DME may have any meaning whatsoever. It just so happens that the
- default keymappings assign such things as the `return' key to the RETURN
- function, the `up' key to the UP function, etc... Keys are named by their
- keycap labels with the following exceptions:
-
- the name for Back-Space is BS
- the name for numeric keypad keys are prepended with an NK, except for
- the Enter key which is named 'ENTER'.
- The four cursor control keys are labeled UP, DOWN, LEFT, and RIGHT
- The three mouse buttons are labeled RMB, MMB, and LMB.
-
- *NOTE* the normal Amiga mouse has only two buttons, the Left and the Right
- mouse buttons (LMB, RMB). A properly installed three-button mouse is
- also supported.
-
- *NOTE* You must type commands in lower-case, except for text, which can be
- either lower or upper case, and for upper-case alpha keys when specifying
- keymaps (i.e. A and s-a are the same key). The exception is the AMIGA
- qualifier key, which uses 'A' instead of 'a'(Alt).
-
- Each key may be qualified with any combination of CTRL, ALT, SHIFT, AMIGA,
- or any of the MOUSE buttons. With 6 qualifiers (7 if your mouse has a
- middle button), you can assign up to 64 (128) different maps to each
- physical key on the keyboard.
-
- NOTE: The CAPS-LOCK, when lit, is equivalent to SHIFT only for Alpha keys.
-
- NOTE: The AMIGA-ALT (aA) combination isn't very usable since Intuition uses
- the sequence to duplicate a Mouse SELECT. Other AMIGA sequences are used
- by intuition for mouse movement and other things. Some other qualifier
- combinations may not be usable due to other special sequences.
-
- ***EXAMPLES:***
-
- tab tab
- a-a ALT a
- A-a AMIGA a
- sA-a SHIFT AMIGA a
- s-tab SHIFT tab
- c-tab CTRL tab
- ac-? ALT-CTRL ?
- s-f5 SHIFT F5
- nk0 Numeric Keypad 0
- cs-nk0 CTRL SHIFT Numeric Keypad 0
- L-lmb Left Mouse button pressed
- L-mmove Mouse moved while left mouse button held down
- LR-lmb left mouse button hit while right mouse button held down
-
- ***************
-
- MAPPING MOUSE BUTTONS
-
- Mouse buttons serve both as QUALIFIERS and as KEYS. Thus, you can map
- both normal keystrokes which require a mouse button to be held down:
-
- map L-a ``left button and an a''
-
- as well as the mouse keys themselves:
-
- map L-lmb ``left mouse key''
-
- note that you had to specify the left mouse button down qualifier L as
- well as the left mouse button LMB.
-
- If you map the left mouse button, and also map a sequence such as left
- mouse button + a:
-
- map L-lmb tomouse
- map L-a ``hello''
-
- Note that the first mapping will always get executed even if you
- intended L-a (that is, BOTH mappings would get executed). In order
- to avoid confusion you might want to UNMAP the system default mapping
- for the right mouse button (mapped to ICONIFY) if you wish to apply
- combinations to the right mouse button.
-
- MOUSE MOVEMENT is mapped with one or more mouse qualifiers (L, R, M),
- plus 'MMOVE' for the key. That is:
-
- map LR-mmove ``moving the mouse with both buttons held down''
-
-
- DEFAULT KEYMAP:
-
- All Printable Ascii keys mapped to their ascii equivalent
- BS, DEL, UP, DOWN, LEFT, RIGHT, TAB, S-TAB, and ENTER mapped properly
-
- `s- ' Shift Space is Mapped to space
- backspace Back Space
- tab Tab
- s-tab Back tab
- enter the RETURN command
- return `return insline up firstnb down'
- esc Escape into command mode
- del Delete character
- s-del Delete line
- c-del Remove to end of line
- up cursor up
- down cursor down
- left cursor left
- right cursor right
- s-up top of text
- s-down bottom of text
- s-left first column
- s-right last column (one past the last non-blank on a line)
- c-up page up
- c-down page down
- a-up scroll up
- a-down scroll down
- c-q Quit
- c-w TOGGLE WORD WRAP MODE
- f1 Prompts for file to insert
- f2 Prompts for new file to replace current text with
- f3 Prompts for new file to place into new window
- f7 Prompts for filename to save marked block to
- f8 Saves current text and then does an 'f2'
- f9 Saves current text, but does not quit
- f10 Saves current text and quits.
- c-r Word Right
- c-l Word Left
- c-i insert mode on
- c-o insert mode off
- c-/ Prompts for search pattern
- c-p search previous occurance
- c-n search next occurance
- c-s `split first down' ... fancy split line
- c-u Unblock a block
- c-b Mark start/end of a block
- a-s SOURCE a block of text as if it were a script file
- sa-s SOURCE the current line of text as if it were a script file
- a-d delete block
- a-c copy block
- a-m move block
- c-f reformat paragraph
- c-g Prompts for line to GOTO to.
- c-j join next line to this line.
- L-lmb move cursor to mouse position (tomouse)
- L-mmove move cursor to mouse position (tomouse)
- R-rmb iconify window
- help `newwindow newfile s:DME.DOC escimm `find ''
-
-
- III
- COMMAND SEQUENCES
-
- DME has a rich command set which allows you to embed commands within
- commands, or specify multiple commands in a row. A command consists of a
- KEYWORD followed by a FIXED number of arguments (0, 1, 2...). The argument
- delimeter in DME is a SPACE. Therefore, to embed strings containing spaces
- as a single argument, you must surround the string with `string'
- (backsinglequote-string-singlequote). TEXT to be written as if typed is
- also specified via a string in backquote-quotes. For example:
-
- right right `hello' right right `hello' enter down
- map f4 `right right' map f5 `left left'
- map f4 ``hello''
-
- Reiterating (because this is important!)... If a command expects ONE
- argument, then it really does expect a single argument, and any remaining
- arguments are thought to be the next command... so:
-
- map f4 right
- -right is only one word, so no need
- for `'.
- map f4 `right right'
- -we want to map f4 to two rights... we
- need the `' or the second right will
- not be part of the map.
-
- map c-del `repeat cright del'
- -this is already implimented as REMEOL,
- but shown here for clarity.
-
- Some arguments will eventually be fed through the command interpreter more
- than once. The MAP command is a good example. When you execute a MAP
- command, the first run through the command interpreter installs the map
- string minus a set of quotes. So, if you want to specify text, you must
- enclose the text in two sets of ``text'' because the map string gets passed
- through the command interpreter again when you hit the mapped key. Here
- are some more complex examples:
-
- map f4 `right right `hello' left left' *RIGHT*
- map f4 right right hello left left *WRONG*
-
- map f4 `map f4 ``hello'''
- -the first time you hit F4, it's command
- is to re-map itself to the TEXT `hello'.
- (gads!).
-
- map c-i `repeat tr `` '''
- -example of how to embed a space in a
- map and repeat (goes through command
- interpreter three times!).
-
-
- An easy way to fool around executing commands or making maps is either to
- use the ESC key (which enters command mode), or a-S (alt-shift-s), which
- EXECUTES the current DME line that the cursor is on.... so you can use DME
- to edit and test your new keymappings.
-
-
- !!!!!!!!!! NOTE NOTE NOTE NOTE NOTE !!!!!!!!!!!!!! You must type commands
- in LOWER case. They are in upper case here for visibility.
-
- COMMAND LIST
-
- `text' -enter text as if typed.
- key -execute a keymap as a macro (example: c-a)
- BACK -same as BS
- BACKTAB -backward tab
- BCOPY -copy block before cursor line
- BDELETE -delete the block
- BLOCK -Set start or end of block
- BMOVE -move block before cursor line
- BOTTOM -Move to Bottom of File
- BS -backspace, (delete char to left of cursor)
- BSAVE file -save the block to a file
- BSOURCE -source current text block as if it were a script file
- DEL -delete, (deletes char under cursor)
- DELINE -delete line
- DOWN -cursor down
- DOWNADD -cursor down. If at bottom of text, add a line.
- ESC -toggle manual command entry mode
- ESCIMM arg -go into command entry mode prompting with a
- predefined string.
- EXECUTE comm -Execute a CLI command
- FIND string -SET the search pattern and do a NEXT
- FINDR s1 s2 -Set find and replace patterns and do one find/rep.
- FINDSTR string -SET the search string pattern
- FIRST -move to column 1
- FIRSTNB -Move to first non-blank in line.
- GOTO BLOCK -Goto the beginning of the marked block.
- GOTO START -same as GOTO BLOCK. undefined if no block
- GOTO END -goes to the END of the marked block. undef. if no blk.
- GOTO [+/-]N -Goto an absolute or relative line number
- HEIGHT N -set height in pixels for any new windows
- ICONIFY -iconify the window
- IF cnd act -IF/WHILE/IFELSE.. SEE BELOW
- IFELSE cnd ifact elseact
- INSERTMODE what -set INSERTMODE. what = on, off, or toggle
- INSFILE name -insert a file into the current text.
- INSLINE -insert line
- JOIN -join next line to line at cursor
- LAST -move one beyond the last non-space in a line.
- LEFT -cursor left
- LEFTEDGE N -set leftedge in pixels for any new window
- MAP key map -map a key to a keymap
- MARGIN N -set WordWrap and paragraph formatting margin
- (related to WORDWRAP and REFORMAT)
- NEWFILE name -replace current text with new file
- NEWWINDOW -open newwindow
- NEXT -find next occurance of search pattern
- NEXTR -find next occurance and replace
- PAGEDOWN -pagedown a partial page (see PAGESET)
- PAGESET n -n PERCENT (0 to 100). page step size relative to the
- current number of rows in the window.
- PAGEUP -pageup a partial page (see PAGESET)
- PREV -find previous occurance of search pattern
- PREVR -find previous occurance and replace
- QUIT -quit
- REFORMAT -reformat paragraph using the margin.
- REMEOL -Remove text under and beyond the cursor.
- REPEAT cnt comm -SEE BELOW
- REPSTR string -SET the replace string pattern
- RESETTOGGLE N -clear toggle array entry N(0..31)
- RESIZE cols rows-Resize current window. E.G: `resize 70 23'
- RETURN -same as `FIRST DOWNADD'
- RIGHT -cursor right
- SAVEAS file -save current text under a different name (title
- line name does not change)
- SAVEMAP file -save user keymappings
- SAVEOLD -save current text under current name
- SAVESMAP file -save all keymappings, including system keymaps
- SAVETABS on/off -Optimize file saves by crunching spaces to tabs.
- The default is OFF.
- SCREENBOTTOM -Move cursor to the bottom of the screen.
- SCREENTOP -Move cursor to the top of the screen
- SCROLLUP -Scroll up without moving cursor
- SCROLLDOWN -Scroll down without moving cursor
- SETTOGGLE N -set toggle array entry N (0..255)
- SOURCE file -source a script file
- SPLIT -Split line at cursor
- TAB -forward tab
- TABSTOP N -Set tab stops every N. does not effect text load
- TLATE [+/-]N -translate character by +N or -N, or set character
- to exactly N if no + or -. (e.g. TLATE +65 TLATE 3)
- TOGGLE N -flip toggle array entry N (0..255) (See IF)
- TOMOUSE -moves cursor to mouse position
- TOP -Move to Top of File
- TOPEDGE N -set topedge in pixels for any new window
- UNBLOCK -clear the block markers for the current window
- UNMAP key -unmap a key
- UP -cursor up
- WHILE cnd act -(see below)
- WIDTH N -set width in pixels for any new window
- WLEFT -move to beginning of previous word. If in the
- middle of a word, move to beginning of current word.
- WORDWRAP on/off/toggle
- -Word Wrap mode (related to MARGIN)
- WRIGHT -move to beginning of next word
-
-
-
- -------------------------------------------------------------------
- Command which cause a command line to abort (e.g. in repeat, while):
-
- FIND[R]/NEXT[R]/PREV[R] when the string is not found. NEXT stops at
- the end of the file, PREV stops at the beginning.
-
- DOWN,LEFT,RIGHT,UP when the operation cannot be done.
- -------------------------------------------------------------------
-
-
- REPEAT N arg -Repeat `arg' N times. Apart from being a number, N
- can also be one of:
-
- line Current line # (lines begin at 1)
- lbot #lines to the bottom, including current line
- cleft column # (cols begin at 0)
- cright #chars to eol, including current char under cursor
- tr #char positions to next tab
- tl #char positions to next back tab
-
- Certain commands can abort a REPEAT loop.
- Specifically, any FIND[R], NEXT[R], or PREV[R] in which
- the search string is NOT found will abort a REPEAT.
- Most operations which can go out of bounds, such as
- UP, LEFT, RIGHT, DOWN, also abort a repeat.
-
- Specifying -1 as N causes REPEAT to go on forever
- (well, actually, 0xFFFFFFFF times) or until an abort.
- To abort an accidentel infinite loop, you must use the
- CLI BREAK command.
-
- IF [!]condition arg
- WHILE [!]condition arg
- IFELSE [!]condition arg else arg
-
- If the specified condition is true, execute the argument. For
- WHILE, the argument is executed until the condition is false
- (be careful!).
-
- the optional '!' inverts the logic.
-
- Conditions:
-
- # if toggle entry # is SET. there are 256 toggles (0..255)
- t if On line 1
- b if On last line
- l if At column 0
- r if At end of line (spaces below and beyond)
- m if Text has been modified
- i if in insert mode
- x[<=>]# if column position (starts at 1) is (any OR combo of
- <, =, or >) than some number. Example: x<=20
- y[<=>]# if Line number (starts at 1) is (same as for x)
- cl character under cursor is lower case alpha
- cu character under cursor is upper case alpha
- ca character under cursor is alpha-numeric
- cn character under cursor is numeric
- c[<=>]# character under cursor is ascii code # (# in decimal)
- optional conditionals as in 'x' and 'y'.
- cb cursor within a block
-
- Example: simulating an insert mode toggle: ALT-i (not CTL-i)
-
- map a-i `ifelse 0 `toggle 0 insertmode OFF' `toggle 0 insertmode ON''
-
- Example: while lower case, map to upper case and move right.
-
- map c-U `while cl `tlate -32 right''
-
- Example: Search/Replace all of text.
-
- map c-R `escimm `findstr ' escimm `repstr ' repeat -1 nextr'
-
- if c<32 ``char under cursor is smaller than 32''
- if c<>32 ``char under cursor is not equal to 32''
- while !b down
-
-
- WARNING: It is possible to get into infinite loops with REPEAT and
- WHILE. Currently, BREAK is *not* handled by the open
- window, but by whatever executed DME. That is, you must
- either Ctl-C from your CLI, or send a BREAK to the DME
- process from your CLI. I hope to fix this sometime.
-
-
- IV
- FILE PARTICULARS
-
- No Matter what you set internal tabs to, tabs in disk files will be 8.
- This allows you to use your favorite tabs stops (mine are 4) and still
- have your disk files compatible with TYPE, a printer, etc... DME by
- default doesn't bother to optimize when writing out files and simply uses
- spaces. If you `SAVETABS on' before saving (or in your S:.EDRC, etc...),
- DME will attempt to optimize the file by placing TABS in appropriate
- places. DME will not place any TABS after the first single, back, or
- double quote is encountered in a line. If this does not cover every
- situation in your particular application that you want to be *sure* no tabs
- will occur in sensitive sections, then you should not use `SAVETABS on'.
-
- It should be noted that since DME removes spaces at the end of the line,
- editing UUENCODED ascii files will not work for uuencoded lines which end
- with a space. The nominal fix is to add an extra character after each
- uuencoded line (anything), which is ignored by the UUDECODE program.
-
- The command to save the current document under the default name is SAVEOLD,
- *not* SAVE. SAVE is not a valid command. This is to prevent people who
- have not read the documentation from assuming 'save' takes an argument (and
- screwing up their work). SAVEOLD does NOT take an argument, SAVEAS does.
-
- SAVEOLD/SAVEAS do not automatically backup the destination file. If you
- are working in an enviroment where you are worried about ensuring a viable
- copy can be recovered if your Amiga crashes in the middle of the save, you
- can write a macro to save the file into two places. Usually, people backup
- their working disks so this is not neccesary.
-
- Workbench Support: If DME is run from the workbench, it will automatically
- construct an icon file when you save a document. If run from a CLI, no
- icon file is generated.
-
- V
- WORKBENCH SUPPORT
-
- DME V1.26 and beyond support the workbench in the following way: (1) you
- can click on the DME icon to bring up DME with ram:unnamed. (2) you can
- select one or more standard ascii documents which have DME as the default
- tool. If DME has no knowlege of a text icon, it uses its own. Command
- line arguments are passed to DME via the tooltypes entries for DME's
- application icon or via individual document icons. The following format is
- used:
-
- ARG=flag
-
- See the OVERVIEW section for allowed flags. Only one argument per line
- is allowed (sorry). The tooltypes for the application icon are
- processed first, then the tooltypes for each document icon are
- processed before each file is loaded.
-
- ARG= -t10
- ARG= -l10
-
- VI
- REVISION SUMMARY
-
- V1.28 RELEASE
- Copy block does *not* automatically un-block the block.
- Titlebar text no longer blinks when it changes
- Keyboard releases no longer effect operation, which removes an
- annoying bug with mapping iconify to the keyboard.
- new commands: SCROLLUP, SCROLLDOWN and associated key maps (a-up, a-down)
- you may now place commands -after- an ESCIMM command.
-
- V1.27 RELEASE
- -macros run about 20% faster due to hashing of the command table
- -Maximum # of toggles raised to 256 (see IF/WHILE)
- -small fixes to the code (nothing major)
- -child windows inherit tab stops, insert mode, and wordwrap mode
- -MOUSE BUTTONS AND MOVEMENT CAN NOW BE MAPPED
- -New Commands: ICONIFY (used to be hardwired. Is now a command)
- -Extended Commands: GOTO (GOTO END)
- V1.26 Beta, minimal Release
- -Workbench support
- -New Command: EXECUTE
- V1.25 RELEASE
- -BSAVE does NOT UNBLOCK after saving (switch in functionality yet again)
- -various bugs fixed (IF, tabs on file save)
- -New Commands: MARGIN, REFORMAT, WORDWRAP, RESIZE,
- TOPEDGE, LEFTEDGE, WIDTH, HEIGHT
- -Command line options added for setting the window size and an optional
- specified script file (when specified, local .EDRC not sourced).
-
- -Enhanced Commands: IF ..more control with conditions, addition of
- a couple more specifications.
- JOIN .. functionality slightly changed
- -keymaps may now be used as macros in other commands. (macros)
- -New keymaps added to the default set.
- -Mouse movement cleaned up a little.
-
- V1.24 Internal
-
- V1.23 RELEASE
- -S:.EDRC now sourced instead of C:.EDRC
- -User keymappings now work in COMMAND mode (when you hit ESC).
- -You can now map the Amiga keys ('A' for Amiga, since 'a' is alt).
- -Enhanced Commands: IF/IFELSE/WHILE (optional '!' in front of cond)
- new condition 'cb' 'character in selected block'
- GOTO (can now say `goto block')
- -NewCommands: PAGESET SAVETABS
- -Writing TABS (always 8) out to disk to save space now supported.
-
- V1.22 RELEASE (BUF FIXES FROM 1.20)
- -'newfile' fixed
- V1.21 RELEASE (BUG FIXES FROM 1.20)
- -iconify and window handling fixed
- -left mouse button now tracks the mouse.
- V1.20 RELEASE
- -bug fixes: bsave now unmarks the block, bdelete now sets 'modified' flag.
- (other small fixes).
- -enhancements: overwrite mode status indicator, find, find-replace now
- completely implemented (yahhoo!!!)
- -changed commands: FIND NEXT PREV: no longer loop back to the top of
- file or top->bottom in the case of PREV. DELINE will now delete
- text on the line if there is only one line of text.
- -enhanced commands: GOTO REPEAT
- -new commands: SAVEMAP SAVESMAP TOGGLE SETTOGGLE RESETTOGGLE TLATE
- IF IFELSE WHILE BSOURCE
- FINDSTR REPSTR FINDR NEXTR PREVR
- NEWWINDOW
- -new keymappings: (see a-s, a-S, f3)
- -window iconification with mouse menu button.
-
-
- V1.12 RELEASE
- -cursor is now pen #3 rather than #1.
- -changeover to AZTEC C, smaller executable.
- -now maps shift space to a space.
- -new commands: REMEOL, WLEFT, WRIGHT
- -display bug fixes (SPLIT)
- -FIND/PREV/NEXT will now abort a REPEAT if string not found.
-
- V1.11 RELEASE NOTES
- -Bug fixes (mainly graphical mistakes).
- -User keymappings are disabled in command mode (so you can unmap
- single ascii characters you may have mapped).
- -Illegal key combinations no longer give garbage (e.g. ALT-CURSOR-DOWN)
- you can, of course, still map them to anything you wish.
- -Save now checks for error conditions on write.
- -Uses Default Console Keymap (i.e. no longer assumes USA)... but there
- *is* some stangeness.
-
- V1.00 RELEASE NOTES
- -has find, but no replace function
- -marked blocks are not highlighted
- -assumes USA keyboard (fixed 1.11)
- -disk files written out use spaces instead of tabs&spaces
- -No scroll bar yet.
-
-
- VII
- COMPILING
-
- DME now compiles only under AZTEC. You must compile with the 32 bit int
- option, but may use the small code/data model. A support lib which I have
- created is also required. I use a precompiled symbol file containing ALL
- the AMIGA includes (but not any Aztec standard includes).
-
-